iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0

在上一章節講到程式語言有階級之分,在程式執行前需將「高階語言」翻譯成「機器語言」,由於計算機無法執行高階語言,所以Compiler因此而誕生,他的職責就是「翻譯」,今天這篇文章會對 Compiler 做個入門的介紹/images/emoticon/emoticon08.gif

程式語言翻譯的過程

https://ithelp.ithome.com.tw/upload/images/20230904/20149362i6WrHi6cN5.png
廣義的 Compiler ,其實就是把一種語言(source code)轉換成另一種語言(object code)的橋樑
學習程式語言其實跟學英文蠻類似,若把上述流程圖的過程轉換為學習英文大致如下:

檢查單字拼寫是否正確 => 檢查文法是否正確 => 檢查語意是否通順 => 翻譯 => 產出結果

編譯器 & 編譯式語言

Compiler translates the whole source code before executing it

編譯器會把「來源碼」編譯成「目標碼」,這裡的目標碼就是用來準備執行(executing)的程式。
目標碼會以「檔案」的形式保存下來,執行系統再透過連結器 (linker) 讀取目標碼的檔案後,並轉換成「機器語言」,也就是可執行的二進位碼,存放於記憶體裡

編譯器的其中一個特點就是會等全部翻譯完,才去執行,中間的檢查也會略過。編譯語言多半以「靜態語言」和「強型別語言」(strongly-typed) 為主,需事先定義型別和有型別檢查 (Type Check) 的機制

優點是執行速度快,效率較佳,因為程式在編譯時期,就已經被預先編譯成「機器語言」,不像直譯式語言一樣,每次執行都要重複檢查其正確性與逐行翻譯; 缺點是程式語法繁瑣、缺乏彈性,只能在執行前檢查出簡單的錯誤,這會增加除錯的難度

EX.編譯式語言: C, C++, C#, Swift, Go...

直譯器 & 直譯式語言

Interpreter translates and executes the source code a line at a time

直譯器跟編譯器的差別在於直譯器會把目標碼馬上執行,right now!!
可以把直譯器想像成一位「即時翻譯員」,每説一句就翻譯一句,轉換成程式的話,就是每翻譯一句就去執行一次

直譯式語言多半以「動態語言」為主,具有靈活的型別處理(太靈活了?),優點為語法簡潔且有較高的彈性; 缺點則是型別錯誤要到執行時期才會呈現出來,以及逐行翻譯導致效能較不理想

直譯式語言還會受限於環境,也就是需要有一個適合的執行環境 or 虛擬機 (VM, Virtual Machine),才可以執行

EX.直譯式語言:Python, PHP, javaScript, Perl, Basic...

總結

一般比較大型的系統,會偏向使用編譯式語言來撰寫,原因是大型系統可能有幾萬甚至幾百萬行的code,如果要邊翻譯邊執行,那速度肯定非常慢,沒有這麼多美國時間!直譯式語言由於是一邊翻譯一邊執行,所以速度比較慢,不過靈活度高,適合用於撰寫較小型的專案

最後,使用一張圖來做為總結
https://ithelp.ithome.com.tw/upload/images/20230905/20149362M0b3qwqWYi.png

[補充]有趣小知識

https://ithelp.ithome.com.tw/upload/images/20230905/20149362VibMa2Seya.jpg

葛麗絲·穆雷·霍普(Grace Murray Hopper)|生於美國紐約州
她是設計了世界上第一個編譯器(Compilier) A-0 系統的人,也是世界最早一批的程式設計師之一,而且同時還是美國海軍准將
Grace的同袍當時在哈佛二型的繼電器上發現有短路的狀況,大家查找很久都找不到原因,最後才發現竟來是一隻飛蛾意外飛入電腦的繼電器!(如下圖),這件事後來也被記錄在日記本中

以上就是「debug」用語的由來,覺得好有趣😆
目前記事本中的飛蛾殘骸在美國-華盛頓的歷史國家博物館中展出
https://ithelp.ithome.com.tw/upload/images/20230905/20149362qOcSVwIHTj.png

參考資料

  1. 直譯器VS編譯器
  2. 溝通人腦和電腦的橋樑——編譯器(Compiler)
  3. [Programming] 編譯 vs 直譯
  4. 一點都不深入的了解 Compiler、 Interpreter 和 VM
  5. wikipedia

PS. 若有解說不清或是不正確之處,歡迎指教/images/emoticon/emoticon41.gif


上一篇
Day 2 | 什麼是程式設計 What is programming?
下一篇
Day 4 | 拆解計算機架構(上)|認識電腦的大腦-CPU的組成
系列文
來場計概入門課吧X資訊人該了解的通識素養31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言